#include <stdio.h>
#include <vector>

class PrimeSieve
{
    std::vector<bool> _isprime;
public:
    PrimeSieve(size_t N) : _isprime((N+1)/2, true)
    {
        _isprime[1/2] = false;
        for (size_t p = 3; p * p <= N; p += 2)
        {
            if (_isprime[p/2])
                for (size_t k = p * p; k <= N; k += 2*p)
                    _isprime[k/2] = false;
        }
    }

    bool isPrime(size_t n) const
    {
        return (n % 2 == 0)? (n == 2) : _isprime[n/2];
    }

    bool isOddNumberPrime(size_t n) const
    {
        return _isprime[n/2];
    }
};

static PrimeSieve sieve(1000000);

/* Returns the smallest odd prime p such that n - p is prime. */
static int goldbach(int n)
{
    for (int p = 3; p <= n / 2; p += 2)
        if (sieve.isOddNumberPrime(p) && sieve.isOddNumberPrime(n-p))
            return p;
    return 0;
}

int main()
{
    int n;
    while (scanf("%d", &n) == 1 && n > 0)
    {
        int a = goldbach(n);
        printf("%d = %d + %d\n", n, a, n - a);
    }
    return 0;
}
